git rebase 是一个经常用以美化分支线的指令,近来听说了一个 squash 的指令可以用来合并多个 commits,研究后更是觉得 rebase 的神奇了,本文做一个记录。
现在有以下 commits:
1 | * fc24432 - (HEAD -> master) third commit (2 seconds ago) <cnzsb> |
现在我们把最新提交的 3 次 commit 合并为一次修改则可以使用 git rebase -i HEAD~3 指令(更多参数含义参见 git rebase 文档)。
其中 pick 是挑选出的基准 commit,对需要合并的 commit 使用 squash 或 s 则会保存该 commit 的 commit message 并合并在其前一个 commit 上,最终自己可以更新 commit message 信息;也可以使用 fixup 或 f 丢弃 commit message 并合并,这样最终的 commit message 会是 pick 的那条信息。
1 | pick 559f659 first commit |
这里使用 squash,得到下面的信息。
1 | # This is a combination of 3 commits. |
可以看到每个对应的 commit message,我们这里删掉所有不需要的 commit message,并且保存为 “create commits.txt and update cotents”,最后可以看到成功信息。
1 | [detached HEAD b073a14] create commits.txt and update cotents |
新的 commits:
1 | * b073a14 - (HEAD -> master) create commits.txt and update cotents (11 minutes ago) <cnzsb> |